home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / input.h < prev    next >
C/C++ Source or Header  |  2000-04-25  |  6KB  |  170 lines

  1. #ifndef INPUT_H
  2. #define INPUT_H
  3.  
  4. typedef unsigned InputCode;
  5.  
  6. struct KeyboardInfo
  7. {
  8.     char *name; /* OS dependant name; 0 terminates the list */
  9.     unsigned code; /* OS dependant code */
  10.     InputCode standardcode;    /* CODE_xxx equivalent from list below, or CODE_OTHER if n/a */
  11. };
  12.  
  13. struct JoystickInfo
  14. {
  15.     char *name; /* OS dependant name; 0 terminates the list */
  16.     unsigned code; /* OS dependant code */
  17.     InputCode standardcode;    /* CODE_xxx equivalent from list below, or CODE_OTHER if n/a */
  18. };
  19.  
  20. enum
  21. {
  22.     /* key */
  23.     KEYCODE_A, KEYCODE_B, KEYCODE_C, KEYCODE_D, KEYCODE_E, KEYCODE_F,
  24.     KEYCODE_G, KEYCODE_H, KEYCODE_I, KEYCODE_J, KEYCODE_K, KEYCODE_L,
  25.     KEYCODE_M, KEYCODE_N, KEYCODE_O, KEYCODE_P, KEYCODE_Q, KEYCODE_R,
  26.     KEYCODE_S, KEYCODE_T, KEYCODE_U, KEYCODE_V, KEYCODE_W, KEYCODE_X,
  27.     KEYCODE_Y, KEYCODE_Z, KEYCODE_0, KEYCODE_1, KEYCODE_2, KEYCODE_3,
  28.     KEYCODE_4, KEYCODE_5, KEYCODE_6, KEYCODE_7, KEYCODE_8, KEYCODE_9,
  29.     KEYCODE_0_PAD, KEYCODE_1_PAD, KEYCODE_2_PAD, KEYCODE_3_PAD, KEYCODE_4_PAD,
  30.     KEYCODE_5_PAD, KEYCODE_6_PAD, KEYCODE_7_PAD, KEYCODE_8_PAD, KEYCODE_9_PAD,
  31.     KEYCODE_F1, KEYCODE_F2, KEYCODE_F3, KEYCODE_F4, KEYCODE_F5,
  32.     KEYCODE_F6, KEYCODE_F7, KEYCODE_F8, KEYCODE_F9, KEYCODE_F10,
  33.     KEYCODE_F11, KEYCODE_F12,
  34.     KEYCODE_ESC, KEYCODE_TILDE, KEYCODE_MINUS, KEYCODE_EQUALS, KEYCODE_BACKSPACE,
  35.     KEYCODE_TAB, KEYCODE_OPENBRACE, KEYCODE_CLOSEBRACE, KEYCODE_ENTER, KEYCODE_COLON,
  36.     KEYCODE_QUOTE, KEYCODE_BACKSLASH, KEYCODE_BACKSLASH2, KEYCODE_COMMA, KEYCODE_STOP,
  37.     KEYCODE_SLASH, KEYCODE_SPACE, KEYCODE_INSERT, KEYCODE_DEL,
  38.     KEYCODE_HOME, KEYCODE_END, KEYCODE_PGUP, KEYCODE_PGDN, KEYCODE_LEFT,
  39.     KEYCODE_RIGHT, KEYCODE_UP, KEYCODE_DOWN,
  40.     KEYCODE_SLASH_PAD, KEYCODE_ASTERISK, KEYCODE_MINUS_PAD, KEYCODE_PLUS_PAD,
  41.     KEYCODE_DEL_PAD, KEYCODE_ENTER_PAD, KEYCODE_PRTSCR, KEYCODE_PAUSE,
  42.     KEYCODE_LSHIFT, KEYCODE_RSHIFT, KEYCODE_LCONTROL, KEYCODE_RCONTROL,
  43.     KEYCODE_LALT, KEYCODE_RALT, KEYCODE_SCRLOCK, KEYCODE_NUMLOCK, KEYCODE_CAPSLOCK,
  44.     KEYCODE_LWIN, KEYCODE_RWIN, KEYCODE_MENU,
  45. #define __code_key_first KEYCODE_A
  46. #define __code_key_last KEYCODE_MENU
  47.  
  48.     /* joy */
  49.     JOYCODE_1_LEFT,JOYCODE_1_RIGHT,JOYCODE_1_UP,JOYCODE_1_DOWN,
  50.     JOYCODE_1_BUTTON1,JOYCODE_1_BUTTON2,JOYCODE_1_BUTTON3,
  51.     JOYCODE_1_BUTTON4,JOYCODE_1_BUTTON5,JOYCODE_1_BUTTON6,
  52.     JOYCODE_2_LEFT,JOYCODE_2_RIGHT,JOYCODE_2_UP,JOYCODE_2_DOWN,
  53.     JOYCODE_2_BUTTON1,JOYCODE_2_BUTTON2,JOYCODE_2_BUTTON3,
  54.     JOYCODE_2_BUTTON4,JOYCODE_2_BUTTON5,JOYCODE_2_BUTTON6,
  55.     JOYCODE_3_LEFT,JOYCODE_3_RIGHT,JOYCODE_3_UP,JOYCODE_3_DOWN,
  56.     JOYCODE_3_BUTTON1,JOYCODE_3_BUTTON2,JOYCODE_3_BUTTON3,
  57.     JOYCODE_3_BUTTON4,JOYCODE_3_BUTTON5,JOYCODE_3_BUTTON6,
  58.     JOYCODE_4_LEFT,JOYCODE_4_RIGHT,JOYCODE_4_UP,JOYCODE_4_DOWN,
  59.     JOYCODE_4_BUTTON1,JOYCODE_4_BUTTON2,JOYCODE_4_BUTTON3,
  60.     JOYCODE_4_BUTTON4,JOYCODE_4_BUTTON5,JOYCODE_4_BUTTON6,
  61. #define __code_joy_first JOYCODE_1_LEFT
  62. #define __code_joy_last JOYCODE_4_BUTTON6
  63.  
  64.     __code_max, /* Temination of standard code */
  65.  
  66.     /* special */
  67.     CODE_NONE = 0x8000, /* no code, also marker of sequence end */
  68.     CODE_OTHER, /* OS code not mapped to any other code */
  69.     CODE_DEFAULT, /* special for input port definitions */
  70.         CODE_PREVIOUS, /* special for input port definitions */
  71.     CODE_NOT, /* operators for sequences */
  72.     CODE_OR /* operators for sequences */
  73. };
  74.  
  75. /* Wrapper for compatibility */
  76. #define KEYCODE_OTHER CODE_OTHER
  77. #define JOYCODE_OTHER CODE_OTHER
  78. #define KEYCODE_NONE CODE_NONE
  79. #define JOYCODE_NONE CODE_NONE
  80.  
  81. /***************************************************************************/
  82. /* Single code functions */
  83.  
  84. int code_init(void);
  85. void code_close(void);
  86.  
  87. InputCode keyoscode_to_code(unsigned oscode);
  88. InputCode joyoscode_to_code(unsigned oscode);
  89. InputCode savecode_to_code(unsigned savecode);
  90. unsigned code_to_savecode(InputCode code);
  91.  
  92. const char *code_name(InputCode code);
  93. int code_pressed(InputCode code);
  94. int code_pressed_memory(InputCode code);
  95. int code_pressed_memory_repeat(InputCode code, int speed);
  96. InputCode code_read_async(void);
  97. InputCode code_read_sync(void);
  98. INT8 code_read_hex_async(void);
  99.  
  100. INLINE const char* keyboard_name(int code)
  101. {
  102.     return code_name(code);
  103. }
  104.  
  105. /* Wrapper for compatibility */
  106. INLINE int keyboard_pressed(int code)
  107. {
  108.     return code_pressed(code);
  109. }
  110.  
  111. INLINE int keyboard_pressed_memory(int code)
  112. {
  113.     return code_pressed_memory(code);
  114. }
  115.  
  116. INLINE int keyboard_pressed_memory_repeat(int code, int speed)
  117. {
  118.     return code_pressed_memory_repeat(code,speed);
  119. }
  120.  
  121. INLINE int keyboard_read_async(void)
  122. {
  123.     return code_read_async();
  124. }
  125.  
  126. INLINE int keyboard_read_sync(void)
  127. {
  128.     return code_read_sync();
  129. }
  130.  
  131. /***************************************************************************/
  132. /* Sequence code funtions */
  133.  
  134. /* NOTE: If you modify this value you need also to modify the SEQ_DEF declarations */
  135. #define SEQ_MAX 16
  136.  
  137. typedef InputCode InputSeq[SEQ_MAX];
  138.  
  139. INLINE InputCode seq_get_1(InputSeq* a) {
  140.     return (*a)[0];
  141. }
  142.  
  143. void seq_set_0(InputSeq* seq);
  144. void seq_set_1(InputSeq* seq, InputCode code);
  145. void seq_set_2(InputSeq* seq, InputCode code1, InputCode code2);
  146. void seq_set_3(InputSeq* seq, InputCode code1, InputCode code2, InputCode code3);
  147. void seq_copy(InputSeq* seqdst, InputSeq* seqsrc);
  148. int seq_cmp(InputSeq* seq1, InputSeq* seq2);
  149. void seq_name(InputSeq* seq, char* buffer, unsigned max);
  150. int seq_pressed(InputSeq* seq);
  151. void seq_read_async_start(void);
  152. int seq_read_async(InputSeq* code, int first);
  153.  
  154. /* NOTE: It's very important that this sequence is EXACLY long SEQ_MAX */
  155. #define SEQ_DEF_6(a,b,c,d,e,f) { a, b, c, d, e, f, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE, CODE_NONE }
  156. #define SEQ_DEF_5(a,b,c,d,e) SEQ_DEF_6(a,b,c,d,e,CODE_NONE)
  157. #define SEQ_DEF_4(a,b,c,d) SEQ_DEF_5(a,b,c,d,CODE_NONE)
  158. #define SEQ_DEF_3(a,b,c) SEQ_DEF_4(a,b,c,CODE_NONE)
  159. #define SEQ_DEF_2(a,b) SEQ_DEF_3(a,b,CODE_NONE)
  160. #define SEQ_DEF_1(a) SEQ_DEF_2(a,CODE_NONE)
  161. #define SEQ_DEF_0 SEQ_DEF_1(CODE_NONE)
  162.  
  163. /***************************************************************************/
  164. /* input_ui */
  165.  
  166. int input_ui_pressed(int code);
  167. int input_ui_pressed_repeat(int code, int speed);
  168.  
  169. #endif
  170.